<?php
App::uses('AppController', 'Controller');
App::uses('FileValidation', 'Lib');
App::uses('TexChange', 'Lib');
/**
 * Usuarios Controller
 *
 * @property Usuario $Usuario
 */
class UsuariosController extends AppController {
	
	
	var $components = array('Paginator', 'EmailHandler'); 
	var $helpers = array('Geonames.GeonameInput');
	
	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow('add', 'ativar', 'reenviar_email_ativacao', 'esqueci_a_senha');
	}
	
	public function index_recepcionista($submenu = null, $tipo = null){
		if($this->isRecepcionista()){
			$associacoes = $this->Usuario->Associacao->find('list');
			$especializacoes = $this->Usuario->Especializacao->find('list');
			$assoc_espec_options = array();
			foreach ($associacoes as $key=>$item){
				$assoc_espec_options['a-'.$key] = $item;
			}
			foreach ($especializacoes as $key=>$item){
				$assoc_espec_options['e-'.$key] = $item;
			}
			$tipos = array(
				'status_inscricao'=>array(
					'1' => 'Registrados',
					'2' => 'Não Registrados',
					'3' => 'Inscritos',
					'4' => 'Não inscritos',
					'5'=>'com pagamento confirmado',
					'6' => 'Presentes',
					'7' => 'Não Presentes'
				),
				'tipo_usuario'=>array(
					ADMIN => 'Admin Geral',
					ADMIN_LOCAL => 'Admin Local',
					REVISOR=>'Revisor',
					RECEPCIONISTA=>'Recepcionista',
					USUARIO=>'Usuário'
				),
				'categoria_pagamento'=>$assoc_espec_options
			);
			if(!is_null($tipo))
				switch ($submenu){
					case 'status_inscricao':
						switch($tipo){
							case 1:
								$conditions = array('Login.ativado' => '1');
								break;
							case 2:
								$conditions = array('Login.ativado' => '0');
								break;
							case 3:
								$conditions = array('Pagamento.id IS NOT NULL');
								$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
								break;
							case 4:
								$conditions = array('Pagamento.id IS NULL', 'Login.ativado' => '1');
								break;
							case 5:
								$this->loadModel('Payment.PaymentPagamento');
								$ids = $this->PaymentPagamento->findIdsOfAllConfirmed('Pagamento');
								$conditions = array('Pagamento.id'=>$ids);
								$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
								break;
							case 6: 
								$conditions = array('Usuario.presente' => '1');
								break;
							case 7:
								$this->loadModel('Payment.PaymentPagamento');
								$ids = $this->PaymentPagamento->findIdsOfAllConfirmed('Pagamento');
								$conditions = array('Pagamento.id'=>$ids, 'Usuario.presente'=>0);
								$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
								break;
							default:
								$conditions = array();
							break;
						}
					case 'categoria_pagamento':
						$index = explode('-', $tipo);
						switch ($index[0]){
							case 'a':
								$conditions = array('Usuario.associacao_id'=>$index[1]);
								break;
							case 'e':
								$conditions = array('Usuario.especializacao_id'=> $index[1]);
								break;
						}
						break;
				}
			else
				$conditions = array();
			if(!empty($this->request->data)){
				$nome = $this->request->data['search'];
				$conditions = $conditions + array('OR'=>array(array('Usuario.nome LIKE'=>'%'.$nome.'%'), array('Login.login LIKE'=>'%'.$nome.'%'), array('Usuario.email LIKE'=>'%'.$nome.'%')));
			}
			$this->loadModel('Geonames.RegiaoAdministrativa');
			
			$this->Usuario->recursive = 2;
			$users = $this->paginate($conditions);
			foreach ($users as &$u) {
				$u['Endereco']['estado'] = $this->RegiaoAdministrativa->findStateByGeoCode($u['Endereco']['estado']);
			}
			$this->set('usuarios', $users);
			$this->set('tipos', $tipos);
			$this->set('submenu', $submenu);
			$this->set('tipo', $tipo);
			$this->set('editavel', $this->isAdmin());
		}
		else
			$this->redirect('/pages/blank');
	}

	public function index($submenu = null, $tipo = null) {
		if($this->isAdmin()){
			$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
			$associacoes = $this->Usuario->Associacao->find('list');
			$especializacoes = $this->Usuario->Especializacao->find('list');
			$assoc_espec_options = array();
			foreach ($associacoes as $key=>$item){
				$assoc_espec_options['a-'.$key] = $item;
			}
			foreach ($especializacoes as $key=>$item){
				$assoc_espec_options['e-'.$key] = $item;
			}
			$tipos = array(
				'status_inscricao'=>array(
					'1' => 'Registrados',
					'2' => 'Não Registrados',
					'3' => 'Inscritos',
					'4' => 'Não inscritos',
					'5' => 'com pagamento confirmado',
					'6' => 'Presentes',
					'7' => 'Não Presentes'
				),
				'tipo_usuario'=>array(
					ADMIN => 'Admin Geral',
					ADMIN_LOCAL => 'Admin Local',
					REVISOR=>'Revisor',
					RECEPCIONISTA=>'Recepcionista',
					USUARIO=>'Usuário'
				),
				'categoria_pagamento'=>$assoc_espec_options
			);
			if(!is_null($tipo))
				switch ($submenu){
					case 'status_inscricao':
						switch($tipo){
							case 1:
								$conditions = array('Login.ativado' => '1');
								break;
							case 2:
								$conditions = array('Login.ativado' => '0');
								break;
							case 3:
								$conditions = array('Pagamento.id IS NOT NULL');
								$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
								break;
							case 4:
								$conditions = array('Pagamento.id IS NULL', 'Login.ativado' => '1');
								break;
							case 5:
								$this->loadModel('Payment.PaymentPagamento');
								$ids = $this->PaymentPagamento->findIdsOfAllConfirmed('Pagamento');
								if(!empty($ids))
									$conditions = array('Pagamento.id'=>$ids);
								else $conditions = array('1=0');
								$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
								break;
							case 6:
								$conditions = array('Usuario.presente' => '1');
								break;
							case 7:
								$this->loadModel('Payment.PaymentPagamento');
								$ids = $this->PaymentPagamento->findIdsOfAllConfirmed('Pagamento');
								$conditions = array('Pagamento.id'=>$ids, 'Usuario.presente'=>0);
								$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
								break;
							default:
								$conditions = array();
							break;
						}
					case 'categoria_pagamento':
						$index = explode('-', $tipo);
						switch ($index[0]){
							case 'a':
								$conditions = array('Usuario.associacao_id'=>$index[1]);
								break;
							case 'e':
								$conditions = array('Usuario.especializacao_id'=> $index[1]);
								break;
						}
						break;
					case 'tipo_usuario':
						$conditions = array('Login.tipo'=>$tipo);
				}
			else
				$conditions = array();
			if(!empty($this->request->data)){
				$nome = $this->request->data['search'];
				$conditions = $conditions + array('OR'=>array(array('Usuario.nome LIKE'=>'%'.$nome.'%'), array('Login.login LIKE'=>'%'.$nome.'%'), array('Usuario.email LIKE'=>'%'.$nome.'%')));
			}
			$this->Usuario->recursive = 2;
			$this->set('usuarios', $this->paginate($conditions));
			$this->set('tipos', $tipos);
			$this->set('submenu', $submenu);
			$this->set('tipo', $tipo);
			$this->set('editavel', $this->isAdmin());
			if($tipo == 3 || $tipo == 5)
				$this->render('index_inscritos');
		}
		else
			$this->redirect('/pages/blank');
	}

	public function view($id = null) {
		if(!$this->isAdmin() && !$this->isRecepcionista()){
			$id = $this->usuarioSessao['Usuario']['id'];
		}
		if (!$this->Usuario->exists($id)) {
				throw new NotFoundException(__('Usuário não existe'));
		}
			$options = array('conditions' => array('Usuario.' . $this->Usuario->primaryKey => $id));
			$this->set('usuario', $this->Usuario->find('first', $options));
			if(!$this->isAdmin()){
				$this->render('userview');
			}
	}

	// URL: /registro
	public function add() {
		$erro = false;
		// TODO Pedir também os documentos e o telefone
		if($this->Datas->getDataSistemaLiberado() > date('Y-m-d H:i:s') || $this->Datas->getDataDesligarSistema() < date('Y-m-d H:i:s') ){
			$this->Session->setFlash(__('Fora do prazo de cadastro'), 'flash/bootstrap', array('class'=>'alert alert-block'));
			$this->redirect('/');
		}
		if(!$this->Auth->loggedIn() || $this->isAdmin()){
			if ($this->request->is('post')) {
				$this->Usuario->create();
				if(!$this->isAdmin()){
					$this->request->data['Login']['tipo'] = USUARIO;
					$this->request->data['Login']['ativado'] = 0;
				}
				$this->request->data['Usuario']['hash'] = $this->Usuario->calculaHash($this->request->data);
				$cpf = str_pad(ereg_replace('[^0-9]', '', $this->request->data['Usuario']['cpf']), 11, '0', STR_PAD_LEFT);
				$this->request->data['Usuario']['cpf'] = $cpf;
				$dados = $this->request->data;
				if(!$this->isAdminGeral()){
					if($this->request->data['Login']['tipo'] == 0){
						$this->Session->setFlash(__('Ação inválida'), 'flash/bootstrap', array('class'=>'alert alert-error'));
						$this->notAuth();
					}
				}
				if($dados['Usuario']['cpf'] == '00000000000'){
					$dados['Usuario']['cpf'] = '';
					$this->request->data['Usuario']['cpf'] = '';
				}
				if($this->isAdmin()){
					$validator = $this->Usuario->validator();
					unset($validator['cpf']);
					unset($validator['rg']);
					unset($validator['passaporte']);
				}
				else{
					$this->Usuario->set($dados);
					if(!$this->Usuario->um_doc($dados)){
						$this->Usuario->validationErrors['cpf'] = 'Você deve registrar ao menos um documento';
						$this->Usuario->validationErrors['rg'] = 'Você deve registrar ao menos um documento';
						$this->Usuario->validationErrors['passaporte'] = 'Você deve registrar ao menos um documento';
						$erro = true;
					}
						
				}
				if (!$erro && $this->Usuario->saveAll($dados)) {
					if(!$dados['Login']['ativado']){
						$destinatario = array($dados['Usuario']['email'] => $dados['Usuario']['nome']);
						$this->EmailHandler->registrar($destinatario, $dados['Usuario']['hash']);
						$this->Session->setFlash(__('Seu cadastro foi criado com sucesso. Ative o seu cadastro através do link enviado para seu email de registro. Após ativação da sua conta, entre no sistema e pague a sua inscrição'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					}
					else {
						$this->Session->setFlash(__('Você foi registrado com sucesso!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					}
					(($this->isAdmin()) ? $this->redirect(array('action' => 'index')) : $this->redirect('/login'));
					
					
				} else {
					$this->request->data['Login']['senha'] = '';
					$this->request->data['Login']['confirmacao_senha'] = '';
					$this->Session->setFlash(__('Registro falhou! Verifique os erros e tente novamente.'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
			}
			$especializacaos = $this->Usuario->Especializacao->find('list');
			$associacaos = $this->Usuario->Associacao->find('list');
			$sexo = array('M' => 'Masculino', 'F' => 'Feminino');
			$this->set(compact('especializacaos', 'associacaos', 'sexo','documentos'));
			if($this->isAdmin()){
				$this->render('addmin');
			}
		}
		else
			$this->redirect('/pages/blank');
		
	}
	
	// TODO DONE Colocar endereço
	public function edit($id = null) {
		if($this->isAdmin()){
			if (!$this->Usuario->exists($id)) {
				throw new NotFoundException(__('Usuário inválido'));
			}
			$this->Usuario->unbindModel(array('belongsTo' => array('Especializacao', 'Associacao')));
			$options = array('conditions' => array('Usuario.' . $this->Usuario->primaryKey => $id), 'recursive' => 1);
			$data = $this->Usuario->find('first', $options);
			if ($this->request->is('post') || $this->request->is('put')) {
				$this->request->data['Login']['login'] = $data['Login']['login'];
				$this->request->data['Usuario']['hash'] = $this->Usuario->calculaHash($this->request->data);
				unset($this->request->data['Login']['senha']);
				unset($this->request->data['Login']['ativado']);
				if ($this->Usuario->saveall($this->request->data)) {
					$this->Session->setFlash(__('Usuário salvo com sucesso'), 'flash/bootstrap', array('class'=>'alert alert-success'));
					$this->redirect(array('action' => 'index'));
				} else {
					$this->Session->setFlash(__('Usuário não pôde ser salvo'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
			} else {
	
				$this->request->data = $data;
			}
			$especializacaos = $this->Usuario->Especializacao->find('list');
			$associacaos = $this->Usuario->Associacao->find('list');
			$sexo = array('M' => 'Masculino', 'F' => 'Feminino');
			$this->set(compact('especializacaos', 'associacaos', 'sexo', 'documentos'));
		}
		else
			$this->notAuth();
	}
	
	public function meu_edit() {
		$this->loadModel('Especializacao');
		$this->loadModel('Associacao');
		$this->set('espec', $this->Especializacao->find('list'));
		$this->set('assoc', $this->Associacao->find('list'));
		$id = $this->usuarioSessao['Usuario']['id'];
		$this->Usuario->unbindModel(array('belongsTo' => array('Especializacao', 'Associacao')));
		$options = array('conditions' => array('Usuario.' . $this->Usuario->primaryKey => $id), 'recursive' => 1);
		$data = $this->Usuario->find('first', $options);
		if ($this->request->is('post') || $this->request->is('put')) {
			unset($this->request->data['Login']['senha']);
			unset($this->request->data['Login']['ativado']);
			$this->request->data['Usuario']['id'] = $id;
			if ($this->Usuario->saveall($this->request->data)) {
				$this->Session->setFlash(__('Usuário salvo com sucesso'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				$this->Session->write('Auth', $this->Usuario->Login->read(null, $this->Auth->User('id')));
				$data = $this->Usuario->Login->read(null, $this->Auth->User('id'));
				$this->Session->write('Auth.User', $data['Login']);
				$this->Session->write('Auth.User.Usuario', $data['Usuario']);
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('Usuário não pôde ser salvo'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			}
		} else {

			$this->request->data = $data;
		}
		$especializacaos = $this->Usuario->Especializacao->find('list');
		$associacaos = $this->Usuario->Associacao->find('list');
		$sexo = array('M' => 'Masculino', 'F' => 'Feminino');
		$this->set(compact('especializacaos', 'associacaos', 'sexo', 'documentos'));
	}
	
	public function delete($id = null) {
		if($this->isAdmin()){
			$this->Usuario->id = $id;
			if (!$this->Usuario->exists()) {
				throw new NotFoundException(__('Invalid usuario'));
			}
			$user = $this->Usuario->findById($id);
			if($user['Login']['tipo'] == 0){
				$this->notAuth(__('Sem permissão'));
			}
			$this->request->onlyAllow('post', 'delete');
			if ($this->Usuario->delete()) {
				$this->Session->setFlash(__('Usuario excluído'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				$this->redirect(array('action' => 'index'));
			}
			$this->Session->setFlash(__('Usuario não excluído'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect(array('action' => 'index'));
		}
		else
			$this->redirect('/pages/blank');
	}
	
	// URL: /ativar
	public function ativar($hash){
		if(!$this->Auth->loggedIn()){
			$usuario = $this->Usuario->find('first', array('conditions'=>array('Usuario.hash'=>$hash), 'recursive'=>0));
			if(!$usuario){
				$this->Session->setFlash(__('Registro falhou! Link inválido'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			}
			else if($usuario['Login']['ativado'])
				$this->Session->setFlash(__('Usuário já registrado!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
			else{
				$this->Usuario->Login->id = $usuario['Login']['id'];
				if($this->Usuario->Login->saveField('ativado', 1))
					$this->Session->setFlash(__('Registro efetuado com sucesso! Você pode se logar no sistema agora'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				else $this->Session->setFlash(__('Registro falhou! Link inválido'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			}
		}
		$this->redirect('/');		
	}
	
	public function reenviar_email_ativacao(){
		if(!$this->Auth->loggedIn()){
			if ($this->request->is('post')) {
				$this->Usuario->recursive = 0;
				$usuario = $this->Usuario->findByEmail($this->request->data['Usuario']['email']);
				if($usuario){
					if(!$usuario['Login']['ativado']){
						$this->EmailHandler->registrar(array($usuario['Usuario']['email']=>$usuario['Usuario']['nome']), $usuario['Usuario']['hash']);
						$this->Session->setFlash(__('E-mail reenviado com sucesso!!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
						$this->redirect('/login');
					}
					else{
						$this->Session->setFlash(__('Esse usuário já foi ativado!'), 'flash/bootstrap', array('class'=>'alert alert-block'));
					}
				}
				else{
					$this->Session->setFlash(__('Esse E-mail não está cadastrado em nossa base!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
			}
		}
		else
			$this->redirect('/');
	}
	
	public function esqueci_a_senha(){
		if(!$this->Auth->loggedIn()){
			if ($this->request->is('post')) {
				$this->Usuario->recursive = 0;
				$usuario = $this->Usuario->findByEmail($this->request->data['Usuario']['email']);
				if($usuario){
					$passwd = gerarSenha();
					$usuario['Login']['senha'] = $usuario['Login']['confirmacao_senha'] = $passwd;
					$this->Usuario->unbindModel(array('hasOne'=>array('Pagamento')));
					if ($this->Usuario->Login->save($usuario)) {
						$this->EmailHandler->passwdReset($usuario['Usuario']['email'], $usuario['Login']['login'], $passwd);
						$this->Session->setFlash(__('Você receberá em breve um email com a nova senha.'), 'flash/bootstrap', array('class'=>'alert alert-success'));
						$this->redirect('/login');
					}
					else 
						$this->Session->setFlash(__('Erro ao trocar a senha!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
				else{
					$this->Session->setFlash(__('Esse E-mail não está cadastrado em nossa base!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				}
			}
		}
		else
			$this->redirect('/');
	}
	
	public function recepcionista(){
		if($this->isRecepcionista()){
			$conditions = array();
			if(!empty($this->request->data['nome']))
				$conditions['Usuario.nome LIKE'] = '%'.$this->request->data['nome'].'%';
			if(!empty($this->request->data['rg']))
				$conditions['Usuario.rg LIKE'] = '%'.$this->request->data['rg'].'%';
			if(!empty($this->request->data['cpf']))
				$conditions['Usuario.cpf LIKE'] = '%'.$this->request->data['cpf'].'%';
			if(!empty($conditions)){
				$this->Usuario->unbindModel(array('hasAndBelongsToMany'=>array('Curso'), 'hasMany'=>array('Trabalho', 'Telefone')));
				$this->Usuario->Pagamento->bindModel(array('hasOne'=>array('PaymentPagamento'=>array('className'=>'Payment.PaymentPagamento', 'foreignKey'=>'pagamento_system_id'))));
				$this->set('resultados', ($this->Usuario->find('all', array('conditions'=>$conditions, 'recursive'=>3))));
			}
			else $this->set('resultados', false);
		}else{
			$this->notAuth();
		}
	}
	
	public function marca_presenca($id) {
		if($this->isRecepcionista()){
			$this->autoRender = false;
			$this->Usuario->id = $id;
			$dados = $this->Usuario->findById($id);
			if(!$dados['Usuario']['presente']){
				if($this->Usuario->saveField('presente', 1))
					$this->Session->setFlash(__('Usuário marcado como presente!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				else $this->Session->setFlash(__('Usuário não foi marcado como presente!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				$this->redirect($this->referer());
			}
			else{
				if($this->Usuario->saveField('presente', false))
					$this->Session->setFlash(__('Usuário desmarcado como presente!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				else $this->Session->setFlash(__('Usuário não foi desmarcado como presente!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				$this->redirect($this->referer());
			}
		}else{
			$this->notAuth();
		}
	}
	
	public function presente($id){
		$this->marca_presenca($id);
		$this->redirect('recepcionista');
	}
	
	public function lista_ordem_alfabetica($associacao = null){
		$this->loadModel('PagseguroFormasPagamento');
		$this->loadModel('Associacao');
		$this->Usuario->unbindModel(array(
				'hasOne'=>array('Login'),
				'belongsTo'=>array('Especializacao'),
				'hasMany'=>array('Trabalho', 'Telefone'),
				'hasAndBelongsToMany'=>array('Curso')
				));
		$this->paginate = array(
				'limit'=>20,
				'fields'=>array('DISTINCT(Usuario.id)', 'nome', 'Associacao.nome', 'Endereco.estado', 'StatusAtual.pagseguro_formas_pagamento_id', 'Pagamento.valor_total'),
				'order'=>'UPPER(Usuario.nome) ASC'
			);
		if(!is_null($associacao)){
			$this->paginate = array_merge(array('conditions'=>array('associacao_id'=>$associacao)), $this->paginate);
		}
		$dados = $this->paginate();
		$this->set('usuarios', $dados);
		$this->set('formas_pagamento', $this->PagseguroFormasPagamento->find('list'));
		$this->set('associacoes', $this->Associacao->find('list'));
		$this->set('associacao', $associacao);
	}
	
	public function resumo_estado(){
		$this->Usuario->unbindModel(array(
				'hasOne'=>array('Login'),
				'belongsTo'=>array('Especializacao'),
				'hasMany'=>array('Trabalho', 'Telefone'),
				'hasAndBelongsToMany'=>array('Curso')
		));
		$dados = $this->Usuario->find('all', array('fields'=>array('COUNT(Usuario.id) AS total', 'Endereco.estado'), 'group'=>'UPPER(Endereco.estado)'));
		$this->set('dados', $dados);
	}
	
	public function index_revisores() {
		if($this->isAdmin()){
			$conditions = array('Login.tipo'=>REVISOR);
			$this->Usuario->recursive = 0;
			$this->set('usuarios', $this->paginate($conditions));
			$this->set('editavel', $this->isAdmin());
			$this->render('index');
		}
		else
			$this->redirect('/pages/blank');
	}
	
	public function comprovante_de_trabalho($trabalho_id) {
		$this->loadModel('Trabalho');
		$usuario = $this->Usuario->findById($this->usuarioSessao['Usuario']['id']);
		$trabalho = $this->Trabalho->findById($trabalho_id);
// 		pr($this->Session->read());exit;
		if($trabalho['Trabalho']['apresentado'] &&
			$this->Session->check('config.liberar_certificados_de_apresetacao') &&
			$this->Session->read('config.liberar_certificados_de_apresetacao') == '1'){
			if ( (($trabalho['Avaliacao']['nota'] == 0) && ($trabalho['Avaliacao']['nota_reavaliacao'] == 0)) || ($trabalho['Trabalho']['usuario_id'] != $this->usuarioSessao['Usuario']['id'])){
				echo $this->Session->setFlash(__('Trabalho Inválido'), 'flash/bootstrap', array('class'=>'alert alert-error'));
				$this->redirect('/inscricao');
			}
			$fileVal = new FileValidation(FILE_VALIDATION_APPID, FILE_VALIDATION_HASH);
			if($trabalho['Trabalho']['comprovante_apresentacao'] == NULL){
				if ($trabalho['Avaliacao']['nota'] >0) {//busca categoria
					$nota = $trabalho['Avaliacao']['nota'];
				}
				else if ($trabalho['Avaliacao']['nota_reavaliacao'] >0) {
					$nota = $trabalho['Avaliacao']['nota_reavaliacao'];
				}
				$this->loadModel('Categoria');
				$categoria = $this->Categoria->findById($nota);
				$texChange = new TexChange();
				$this->loadModel('Data');
				$data_inicio = $this->Data->getData('inicio_evento');
				$data_final = $this->Data->getData('fim_evento');
				$file = $texChange->changeTexApTrabalho(
						APP.'Comprovantes'.DS.'comprovante-ap-trabalho.tex',
						$trabalho,
						$trabalho['Trabalho']['autores'],
						$this->Session->read('config.nome_evento'),
						$this->Session->read('config.local_evento'),
						$data_inicio,
						$data_final,
						$categoria['Categoria']['nome'],
						$trabalho_id
				);
				$response = $fileVal->sendFile($file);
				unlink($file);
				if($response['status'] == 'OK'){
					$this->Trabalho->id = $trabalho_id;
					$this->Trabalho->saveField('comprovante_apresentacao', $response['message']);
					$this->redirect('comprovante_de_trabalho/' . $trabalho_id);
				}
				else{
					$this->log('FILE VALIDATION: '.$response['message']);
					echo $this->Session->setFlash(__('Erro ao gerar seu comprovante! Por favor, entre em contato com a administração'), 'flash/bootstrap', array('class'=>'alert alert-error'));
					$this->redirect('comprovantes');
				}
			}
			else{
				$file = $fileVal->getFile($trabalho['Trabalho']['comprovante_apresentacao']);
				$this->response->body($file);
				$this->response->type('pdf');
					
				//Optionally force file download
				$this->response->download('Certificado-Apresentacao-Trabalho-'.$trabalho_id.'.pdf');
					
				// Return response object to prevent controller from trying to render
				// a view
				return $this->response;
			}
		}
		else{
			echo $this->Session->setFlash(__('Seu trabalho ainda está para ser confirmado como apresentado pela Administração. Em breve, estará disponível!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect('comprovantes');
		}
		
	}
	
	public function comprovante_de_participacao(){
		$usuario = $this->Usuario->findById($this->usuarioSessao['Usuario']['id']);
		if($usuario['Usuario']['presente']){
			$fileVal = new FileValidation(FILE_VALIDATION_APPID, FILE_VALIDATION_HASH);
			if($usuario['Usuario']['comprovante'] == NULL){
				$cursos = '';
				if(empty($usuario['Curso'])){
					$cursos = __('Participante não participou de nenhum Curso');
				}
				else{
					$cursos .= '\begin{itemize}'."\n";
					foreach($usuario['Curso'] as $item){
						$cursos .= '\item '.$item['nome']."\n";
					}
					$cursos .= '\end{itemize}'."\n";
				}
				$texChange = new TexChange();
				$this->loadModel('Data');
				$data_inicio = $this->Data->getData('inicio_evento');
				$data_final = $this->Data->getData('fim_evento');
				$file = $texChange->changeTexParticipacao(
						APP.'Comprovantes'.DS.'comprovante-participacao.tex',
						$this->usuarioSessao['Usuario']['nome'],
						$cursos,
						$this->Session->read('config.nome_evento'),
						$this->Session->read('config.local_evento'),
						$data_inicio,
						$data_final,
						$this->usuarioSessao['Usuario']['id']
				);
				$response = $fileVal->sendFile($file);
				unlink($file);
				if($response['status'] == 'OK'){
					$this->Usuario->id = $usuario['Usuario']['id'];
					$this->Usuario->saveField('comprovante', $response['message']);
					$this->redirect('comprovante_de_participacao');
				}
				else{
					$this->log('FILE VALIDATION: '.$response['message']);
					echo $this->Session->setFlash(__('Erro ao gerar seu comprovante! Por favor, entre em contato com a administração'), 'flash/bootstrap', array('class'=>'alert alert-error'));
					$this->redirect('comprovantes');
				}
			}
			else{
				$file = $fileVal->getFile($usuario['Usuario']['comprovante']);
				$this->response->body($file);
				$this->response->type('pdf');
					
				//Optionally force file download
				$this->response->download('Certificado-Participacao-'.$this->usuarioSessao['id'].'.pdf');
					
				// Return response object to prevent controller from trying to render
				// a view
				return $this->response;
			}
		}
		else{
			echo $this->Session->setFlash(__('Sua participação no evento ainda nao foi confirmada e só será feita no evento!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			$this->redirect('comprovantes');
		}
	}
	
	public function comprovantes(){
		$this->loadModel('Trabalho');
		$trabalhos = $this->Trabalho->find('all', array('conditions' => array('usuario_id =' => $this->usuarioSessao['Usuario']['id'])));
		$this->set('trabalhos', $trabalhos);
		$this->loadModel('CoordenadorTrabalho');
		$this->set('coordenacao', $this->CoordenadorTrabalho->findAllByUsuarioId($this->usuarioSessao['Usuario']['id']));
	}
	
	public function cadastrar_curso($user_id) {
		/*if (($user_id == null) || (!$this->isAdmin())) {
			$this->notAuth();
		}*/
		if (!$this->Usuario->exists($user_id)) {
			throw new NotFoundException(__('Usuário inválido'));
		}
		$user = $this->Usuario->findById($user_id);
		$this->loadModel('Payment.PaymentPagamento');
		$pagamento = $this->PaymentPagamento->find('first', array('conditions'=>array('pagamento_system_id'=>$user['Pagamento']['id'])));
		if (!in_array($pagamento['PaymentPagamento']['status_id'], $this->PaymentPagamento->Status->idsPagos())) {
			$this->Session->setFlash(__('O usuário não possui pagamento confirmado.'), 'flash/bootstrap', array('class'=>'alert alert-danger'));
			$this->redirect("/");
		}
		
		if ($this->request->is('post')) {
			$this->loadModel('CursosUsuario');
			$pgto_id = $this->request->data['cadastrar_minicurso']['pgto_id'];
			$selecionados = $this->request->data['selecionados'];
			$cont = 0;
			$this->request->data = null;
			foreach ($selecionados as $c) {
			 	if ($c['cr'] == 1) {
				$this->request->data[$cont]['CursosUsuario']['usuario_id'] = $user_id;
				$this->request->data[$cont]['CursosUsuario']['curso_id'] = $c['cr_id'];
				$this->request->data[$cont]['CursosUsuario']['pagamento_id'] = $pgto_id;
				$this->request->data[$cont]['CursosUsuario']['material'] = $c['mats'];
				$cont++;
			 	}
			}
			//pr($selecionados);
			//pr($this->request->data);
			//return;
			if ($this->CursosUsuario->saveAll($this->request->data)) {
				$this->Session->setFlash(__('Cursos cadastrados com sucesso!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
				$this->redirect('/usuarios');
			} else {
				$this->Session->setFlash(__('Cursos não puderam ser salvo!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
			}
		}
		
		
		
		$cursos = $this->Usuario->Curso->find('list');
		$this->set('cursos', $cursos);
		$this->set('user', $user);
	}
	
	public function remover_curso($id, $user){
		$this->loadModel('CursosUsuario');
		$this->CursosUsuario->id = $id;
		if($this->CursosUsuario->delete())
			$this->Session->setFlash(__('Curso removido com sucesso!'), 'flash/bootstrap', array('class'=>'alert alert-success'));
		else{
			$this->Session->setFlash(__('Curso não pôde ser removido!'), 'flash/bootstrap', array('class'=>'alert alert-error'));
		}
		$this->redirect(array('action'=>'cadastrar_curso', $user));
	}
}
